#!/bin/bash

db_type='mysql'
web_name='springboot-demo'
current_date=`date +%Y%m%d%H%M`
logs_dir='./logs/web'
logfile="${logs_dir}/${current_date}.log"
jarfile='./target/demo-0.0.1.jar'
args=$@
flag=-1

function dc_up() {
    cd ./docker
    if [[ $1 == 'oracle' ]]; then
        echo '使用oracle数据库'
        echo '启动服务'
        docker-compose -f docker-compose.${db_type}.yml up -d --build
    elif [[ $1 == 'mysql' ]]; then
        echo '使用mysql数据库'
        echo '启动服务'
        docker-compose -f docker-compose.${db_type}.yml up -d --build
    else
        echo '参数有误！'
    fi
    cd ..
}

function dc_down() {
    echo '停止服务'
    cd ./docker
    if [[ -n `docker ps -a | grep oracle-xe-11g` ]]; then
        docker-compose -f docker-compose.oracle.yml down
    fi
    if [[ -n `docker ps -a | grep mysql` ]]; then
        docker-compose -f docker-compose.mysql.yml down
    fi
    cd ..
}

function arg_exists() {
    for arg in ${args}
    do
        if [[ ${arg} == $1 ]]; then
            return 0
        fi
    done
    return 1
}

function log() {
    if [[ ! -e ${logs_dir} ]]; then
        echo '存放日志的目录不存在'
        echo '创建存放日志的目录'
        mkdir -p ${logs_dir}
    else
        echo '存放日志的目录已存在'
    fi
    if arg_exists -d || arg_exists --detach; then
        echo "输出web的启动信息到日志文件: ${logfile}"
        docker logs ${web_name} -f > ${logfile} 2>&1 &
    else
        echo '打印web的启动信息到控制台'
        docker logs ${web_name} -f
    fi
}

function package() {
    if [[ $1 == 'oracle' ]]; then
        mvn clean package -Poracle
    else
        mvn clean package
    fi
    mv ${jarfile} ./docker/
}

if [[ $# -eq 0 ]]; then
    dc_down
    package
    dc_up ${db_type}
    log
else
    if [[ $# -eq 1 ]]; then
        if [[ $1 == '-h' || $1 == '--help' ]]; then
            echo '不带任何参数将默认使用mysql数据库，并重启所有服务，打印web的启动信息到控制台'
            echo '-h, --help        获取帮助'
            echo '    --oracle      使用oracle数据库'
            echo '    --mysql       使用mysql数据库'
            echo '-w, --web         只重启web，不包括数据库'
            echo '-d, --detach      后台启动，输出日志文件'
        elif [[ $1 == '--mysql' ]]; then
            dc_down
            package
            db_type=mysql
            dc_up ${db_type}
            log
        elif [[ $1 == '--oracle' ]]; then
            dc_down
            package
            db_type=oracle
            dc_up ${db_type}
            log
        elif [[ $1 == '-w' || $1 == '--web' ]]; then
            docker stop ${web_name}
            docker rm ${web_name}
            if [[ -n `docker ps -a | grep oracle-xe-11g` ]]; then
                db_type=oracle
            else
                db_type=mysql
            fi
            package
            dc_up ${db_type}
            log
        fi
    fi
fi

